package huawei.od;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 【种树】
 * 小明在直线的公路上种树，现在给定可以种树的坑位的数量和位置，以及需要种多少棵树苗
 * 问树苗之间的最小间距是多少时，可以保证种的最均匀（两棵树苗之间的最小间距最大）
 * 「输入描述」
 * 输入三行：
 * 第一行一个整数：坑位的数量
 * 第二行以空格分隔的数组：坑位的位置
 * 第三行一个整数：需要种植树苗的数量
 * 「输出描述」
 * 树苗之间的最小间距
 *
 * 示例
 * 输入：
 * 7
 * 1 3 6 7 8 11 13
 * 3
 * 输出：
 * 6
 *
 * @author
 */
public class PlantTrees {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        int[] position = new int[n];
        for(int i=0;i<n;i++){
            position[i] = in.nextInt();
        }

        int target = in.nextInt();

        System.out.println(maxDistance(position, target));
    }

    private static int maxDistance(int[] position, int target) {
        Arrays.sort(position);
        int left = 1;
        int right = position[position.length - 1] - position[0];
        int ans = -1;
        while (left <= right){
            int mid = (left + right) / 2;
//            System.out.println("left:"+left+",right:"+right+",mid:"+mid);
            if(checkPosition(mid, position, target)){
                ans = mid;
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return ans;
    }

    private static boolean checkPosition(int mid, int[] position, int target) {
        int pre = position[0];
        int cnt = 1;
        for(int i=1; i<position.length; ++i){
            if(position[i] - pre >= mid){
                pre = position[i];
                cnt += 1;
            }
        }
        return cnt >= target;
    }
}
